home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / m2gem106.lzh / CRYSTAL1.06 / SRC / TOOLBOX / APPLTOOL.MOD < prev    next >
Encoding:
Modula Implementation  |  1994-01-23  |  6.4 KB  |  289 lines

  1. IMPLEMENTATION MODULE ApplTool;
  2.  
  3. (*
  4. Application Tools.
  5.  
  6. UK __DATE__ __TIME__
  7. *)
  8.  
  9. (*IMP_SWITCHES*)
  10.  
  11. FROM AES        IMPORT IBM,Small,IntIn,IntOut,crystal,Version,
  12.                        Nil,GString,Root,ObjectFlag,LastOb,ObjectState,Normal,
  13.                        Object,Global,String,GBoxChar,GRect;
  14. FROM GrafMgr    IMPORT GrafHandle,GrafMouse,MOn,MOff;
  15. FROM ObjcMgr    IMPORT ObjcDraw;
  16. FROM RsrcMgr    IMPORT RsrcObFix;
  17. FROM ShelMgr    IMPORT ShelRead;
  18. FROM WindTool   IMPORT BeginUpdate,EndUpdate;
  19. FROM VDI        IMPORT XY;
  20. FROM VControl   IMPORT MaxWorkOut;
  21. FROM VAttribute IMPORT VSTFont,VSTPoint;
  22. FROM VQuery     IMPORT VQExtnd,VQTAttributes,TextAttributes;
  23. FROM VRaster    IMPORT VROCpyFm,SOnly,MFDB;
  24. FROM VDITool    IMPORT OpenVWork,CloseVWork;
  25. FROM PORTAB     IMPORT NULL,UNSIGNEDWORD,UNSIGNEDLONG;
  26. FROM pSTORAGE   IMPORT ALLOCATE,DEALLOCATE,SIZETYPE;
  27. FROM SYSTEM     IMPORT ADR;
  28. AES_SYSTEM_IMPORT
  29. #if ST
  30. #warning ...using GetCookie(),
  31. #warning you need M2POSIX 0.7 or higher
  32. FROM DosSystem IMPORT GetCookie;
  33. #endif
  34.  
  35. IMPORT SetObject,GetObject;
  36. #if ST
  37. #ifdef MM2
  38. IMPORT PrgCtrl;
  39. #elif (defined HM2)
  40. IMPORT TOS;
  41. #elif (defined LPRM2)
  42. #warning you need the module LPRTERMINATION
  43. FROM LPRTERMINATION IMPORT IsAPP;
  44. #elif (defined TDIM2)
  45. #warning you need a special module determining accessory execution
  46.  
  47. #else
  48.  
  49. #endif
  50. #endif
  51.  
  52. #if Seimet
  53. CONST F104 = 068020500H;
  54.  
  55. CONST F130 = 082010500H;
  56. #endif
  57.  
  58. (*
  59. PROCEDURE Accessory(): BOOLEAN;
  60.  
  61. BEGIN
  62. #ifdef HM2
  63.   RETURN NOT(TOS.IsApp());
  64. #elif (defined LPRM2)
  65.   RETURN NOT(IsAPP());
  66. #elif (defined MM2)
  67.   RETURN PrgCtrl.Accessory();
  68. #elif (defined TSM2_1)
  69.   (* try to do something with ShelRead() here *)
  70. #else
  71.   RETURN FALSE; (* default *)
  72. #endif
  73. END Accessory;
  74. *)
  75.  
  76. PROCEDURE ApplGetInfo(    Type: UNSIGNEDWORD;
  77.                       VAR Out1: UNSIGNEDWORD;
  78.                       VAR Out2: UNSIGNEDWORD;
  79.                       VAR Out3: UNSIGNEDWORD;
  80.                       VAR Out4: UNSIGNEDWORD);
  81.  
  82. CONST KAOS = 1042H;
  83.  
  84. #if ST
  85. (*
  86.   PROCEDURE VQMagX(): BOOLEAN;
  87.  
  88.   CONST MagX = 04D616758H;
  89.  
  90.   VAR Value: UNSIGNEDLONG;
  91.  
  92.   BEGIN
  93.     IF GetCookie(MagX,Value) THEN
  94.       RETURN TRUE;
  95.     END;
  96.     RETURN FALSE;
  97.   END VQMagX;
  98. *)
  99.  
  100.   PROCEDURE VQWINX(): BOOLEAN;
  101.  
  102.   BEGIN
  103.     WITH IntIn DO
  104.       Array[0]:= 0;
  105.       Array[1]:= 22360;
  106.     END;
  107.     IntOut[0]:= 0;
  108.     crystal(104,2,5,0);
  109.     IF IntOut[0] # 0 THEN
  110.       RETURN (IntOut[1] MOD 1000H) >= 0210H;
  111.     END;
  112.     RETURN FALSE;
  113.   END VQWINX;
  114. #endif
  115.  
  116.   PROCEDURE QueryAESFont(    Which : UNSIGNEDWORD;
  117.                          VAR Font  : UNSIGNEDWORD;
  118.                          VAR Height: UNSIGNEDWORD);
  119.  
  120.   (* st magazin 2/93 p. 65 *)
  121.  
  122.   CONST WordWidth    = 16; (* word width by bits *)
  123.         BytesPerWord = 2;
  124.  
  125.   VAR Temp   : UNSIGNEDWORD; (* temporary workstation handle *)
  126.       Attrib : TextAttributes;
  127.       WorkOut: ARRAY[0..(MaxWorkOut - 1)] OF UNSIGNEDWORD;
  128.       Buffer : MFDB;
  129.       Screen : MFDB;
  130.       Amount : SIZETYPE;
  131.       PXY    : ARRAY[0..7] OF XY;
  132.       Test   : Object;
  133.       Rect   : GRect;
  134.       GrWChar: UNSIGNEDWORD;
  135.       GrHChar: UNSIGNEDWORD;
  136.       Dummy  : UNSIGNEDWORD;
  137.       Size   : UNSIGNEDWORD;
  138. (*    Text   : String;*)
  139.  
  140.   BEGIN
  141.     WITH Test DO
  142.       ObNext:= Nil; ObHead:= ObNext; ObTail:= ObHead;
  143.       SetObject.Extnd(ADR(Test),Root,0); (* clear flag *)
  144. (*    SetObject.Type(ADR(Test),Root,GString);*)
  145.       SetObject.Type(ADR(Test),Root,GBoxChar);
  146.       ObFlags:= ObjectFlag{LastOb};
  147.       ObState:= Normal;
  148. (*    Text:= " ";*)
  149. (*    ObSpec.String:= ADR(Text);*)
  150.       ObSpec.HexCode:= 020001100H;
  151.       ObX:= 0;
  152.       ObY:= 0;
  153.       ObWidth:= 1;
  154.       ObHeight:= 1;
  155.     END;
  156.  
  157.     RsrcObFix(ADR(Test),Root);
  158.     GetObject.Rect(ADR(Test),Root,Rect);
  159.  
  160.     GrafMouse(MOff,NIL);
  161.     BeginUpdate;
  162.     IF OpenVWork(Temp) THEN
  163.       WITH Buffer DO
  164.         FDW:= Rect.GW;
  165.         FDH:= Rect.GH;
  166.         FDWdWidth:= (FDW + 15) DIV WordWidth;
  167.         FDStand:= FALSE;
  168.         FDNPlanes:= Global.ApNPlanes;
  169. #ifdef TDIM2
  170.         Amount:= LONG(FDWdWidth * BytesPerWord * FDH * FDNPlanes); (* why? *)
  171. #else
  172.         Amount:= FDWdWidth * BytesPerWord * FDH * FDNPlanes;
  173. #endif
  174.         ALLOCATE(FDAddr,Amount);
  175.       END;
  176.  
  177.       IF Buffer.FDAddr # NIL THEN
  178.         Screen.FDAddr:= NULL;
  179.  
  180.         WITH Rect DO
  181.           PXY[0]:= GX;
  182.           PXY[1]:= GY;
  183.           PXY[2]:= GX + GW - 1;
  184.           PXY[3]:= GY + GH - 1;
  185.  
  186.           PXY[4]:= 0;
  187.           PXY[5]:= 0;
  188.           PXY[6]:= GW - 1;
  189.           PXY[7]:= GH - 1;
  190.         END;
  191.  
  192.         VROCpyFm(Temp,SOnly,PXY,Screen,Buffer);
  193.         ObjcDraw(ADR(Test),Root,1,Rect);
  194.       END;
  195.  
  196.       VQTAttributes(GrafHandle(Dummy,Dummy,Dummy,Dummy),Attrib);
  197.  
  198.       IF Buffer.FDAddr # NIL THEN
  199.         WITH Rect DO
  200.           PXY[0]:= 0;
  201.           PXY[1]:= 0;
  202.           PXY[2]:= GW - 1;
  203.           PXY[3]:= GH - 1;
  204.  
  205.           PXY[4]:= GX;
  206.           PXY[5]:= GY;
  207.           PXY[6]:= GX + GW - 1;
  208.           PXY[7]:= GY + GH - 1;
  209.         END;
  210.  
  211.         VROCpyFm(Temp,SOnly,PXY,Buffer,Screen);
  212.         DEALLOCATE(Buffer.FDAddr,Amount);
  213.       END;
  214.  
  215.       CloseVWork(Temp);
  216.     END;
  217.     EndUpdate;
  218.     GrafMouse(MOn,NIL);
  219.  
  220.     Font:= Attrib.Font;
  221.  
  222.     CASE Which OF
  223.       IBM:
  224.         Height:= Attrib.Height;
  225.     | Small:
  226.         VQExtnd(GrafHandle(Dummy,Dummy,Dummy,Dummy),FALSE,WorkOut);
  227.         Height:= WorkOut[46]; (* smallest height *)
  228.     ELSE
  229.       ;
  230.     END;
  231.   END QueryAESFont;
  232.  
  233. (* alternativ:
  234.   BEGIN
  235.     IF OpenVWork(Temp) THEN
  236.       VQTAttributes(GrafHandle(GrWChar,GrHChar,Dummy,Dummy),Attrib);
  237.       VSTFont(Temp,Attrib.Font);
  238.  
  239.       CASE Which OF
  240.         IBM:
  241.  
  242.       | Small:
  243.  
  244.       ELSE
  245.         ;
  246.       END;
  247.  
  248.       CloseVWork(Temp);
  249.     END:
  250.   END QueryAESFont;
  251. *)
  252.  
  253. BEGIN
  254. #if ST
  255.   IF ((Version() >= 0399H) AND (Version() < KAOS)) (* OR VQWINX() *) THEN
  256.     IntIn.Array[0]:= Type;
  257.     crystal(130,1,5,0);
  258.     Out1:= IntOut[1];
  259.     Out2:= IntOut[2];
  260.     Out3:= IntOut[3];
  261.     Out4:= IntOut[4];
  262.   ELSE
  263. #endif
  264.     CASE Type OF
  265.       0:
  266.         QueryAESFont(IBM,Out2,Out1);
  267.         Out3:= 0;
  268.     | 1:
  269.         QueryAESFont(Small,Out2,Out1);
  270.         Out3:= 0;
  271.     | 2:
  272.         Out1:= 0;
  273.         Out2:= 16;
  274.         Out3:= 0;
  275.         Out4:= 0;
  276.         IntOut[0]:= 0;
  277.     | 3:
  278.         Out1:= 0;
  279.         IntOut[0]:= 0;
  280.     ELSE
  281.       IntOut[0]:= 0;
  282.     END;
  283. #if ST
  284.   END;
  285. #endif
  286. END ApplGetInfo;
  287.  
  288. END ApplTool.
  289.